package interview.美团;

import java.util.Scanner;
//求和
//        时间限制： 3000MS
//        内存限制： 589824KB
//        题目描述：
//        小美很喜欢求和符号Σ（读作sigma）。她随手画了一张n个点m条边的简单无向图（无重边和自环，但不保证连通），她想知道这张图有多少个形如Σ的图形。由于这张图可以随意拉伸旋转等变换，故这个图形需要满足如下条件：
//
//        恰好五个点组成，这五个点互不相同
//
//        这五个点连成一条链
//
//        两个图形视为不同，当且仅当其包含的点的编号集合不同。具体例子参见样例。
//
//
//
//        输入描述
//        第一行两个正整数n,m；
//
//        接下来m行，每行两个正整数x,y，表示点x与y之间有一条无向边。
//
//        对于30%的数据，2≤n≤6;
//
//        对于60%的数据，2≤n≤10;
//
//        对于100%的数据,2≤n≤15,1≤m≤60,1≤x<y≤n;
//
//
//
//        输出描述
//        输出一行一个正整数，表示形如Σ的图形个数。
// 45
public class 题目二 {
    static int sum = 0;
    static boolean has = false;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n,m;
        n = scanner.nextInt();
        m = scanner.nextInt();
        int[][] nums = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                nums[i][j] = 0;
            }
        }
        for (int i = 0; i < m; i++) {
            int x = scanner.nextInt();
            int y = scanner.nextInt();
            nums[x - 1][y - 1] = 1;
            nums[y - 1][x - 1] = 1;
        }
        boolean[][] visited = new boolean[n][n];
        for (int i = 0; i < n; i++) {
            fillFalse(visited);
            has = false;
            getPicNum(nums, visited, i, 1);
            if (has) {
                sum++;
            }
        }
        System.out.println(sum);
    }

    private static void fillFalse(boolean[][] visited) {
        int row = visited.length;
        int col = visited.length;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                visited[i][j] = false;
            }
        }
    }


    private static void getPicNum(int[][] nums, boolean[][] visited, int row, int number) {
        if (number == 5) {
            has = true;
        } else {
            for (int i = 0; i < nums.length; i++) {
                if (nums[row][i] == 1 && !visited[row][i]) {
                    visited[row][i] = true;
                    visited[i][row] = true;
                    getPicNum(nums, visited, i, number + 1);
                    visited[i][row] = false;
                    visited[row][i] = false;
                }
            }
        }
    }
}
